
/*
1 页面加载的时候
  1 从缓存中获取到购物车数据 渲染到页面中
    这些数据 checked = true
3 支付按钮
  1 先判断缓存中有没有token
  2 没有 跳转到授权页面
  3 有 token
  4 创建订单 获取订单编号
  5 已经完成了微信支付
  6 手动删除缓存中 已经被选中了的商品
  7 删除后的购物车数据 填充回缓存
  8 在跳转页面
*/
          import {getSetting,chooseAddress,openSetting,showModal,showToast} from "../../utils/asyncwx.js";
          import regeneratorRuntime from '../../lib/runtime/runtime';
          import {request} from "../../request/index.js"
        Page({
          data:{
            address:{},
            cart:[],
           
            totalPrice:0,
            totalNum:0
          },
          onShow(){
            // 1 获取缓存中的收货地址信息
            const address = wx.getStorageSync("address");
            // 1 获取缓存中的购物车数据
            let cart = wx.getStorageSync("cart")||[];
            // 过滤后的购物车数组
            cart = cart.filter(v=> v.checked);
            
            // 1 计算全选
            // every 数组方法 会便利 会接收一个回调函数 那么 每一个回调函数都返回true 那么 every方法的返回值为true
            // 只要有一个回调函数返回false 那么不在循环执行，直接返回false
            // 空数组 调用 every,返回值就是true
            // const allChecked = cart.length?cart.every(v=>v.checked):false
            // let allChecked = true;
            // 1 总价格 总数量
            // let totalPrice = 0;
            // let totalNum = 0;
            // cart.forEach(v => {
            //   if(v.checked){
            //     totalPrice+=v.num*v.goods_price;
            //     totalNum+= v.num;
            //   }else{
            //     allChecked = false
            //   }
            // });
            // 判断数组是否为空
            // allChecked = cart.length!=0?allChecked :false;
            // 2 给data 赋值
            // this.setData({
            //   address,
            //   cart,
            //   allChecked,
            //   totalPrice,
            //   totalNum
            // })
            // console.log(wx.getStorageSync("address"))
            
            this.setData({
              address
            });
            // 1 总价格 总数量
            let totalPrice = 0;
            let totalNum = 0;
            cart.forEach(v => {
                totalPrice+=v.num*v.goods_price;
                totalNum+= v.num;
              
            });
            this.setData({
              cart,
              totalNum,
              totalPrice,
              address
            });

          },
          // 点击 支付
          async handleOrderPay(){
            try {
                         // 判断缓存中有没有token
            const token = wx.getStorageSync("token");
            // 2 判断
            if(!token){
              wx.navigateTo({
                url: '/pages/auth/index'
              });
              return;
            }
            // 3 创建订单
            // 3.1 准备 请求头参数
            // const header = {Authorization:token};
            // 3.2 准备请球体参数
            const order_price = this.data.totalPrice;
            const consignee_addr = this.address.all;
            const cart = this.data.cart;
            let goods=[];
            cart.forEach(v=>goods.push({
              goods_id:v.goods_id,
              goods_number:v.num,
              goods_price:v.goods_price
            }))
            const orderParams = {order_price,consignee_addr,goods}
            // 4 准备发送请求 创建订单 获取订单编号
            const {order_number} = await request({url:"/my/orders/create",method:"POST",data:orderParams})
            // 5 发起 预支付接口
            const {pay} = await request({url:"/my/orders/req_unifiedorder",method:"POST",data:{order_number}})
            // 6 发起微信支付
            await requestPayment(pay);
            // 7 查询后台 订单状态
            const res =  await request({url:"/my/orders/chkOrder",method:"POST",data:{order_number}})
            
            await showToast({title:"支付成功"})
            // 8 手动删除缓存中 已经支付了的商品
            let newCart = wx.getStorageSync("cart");
            newCart = newCart.filter(v=>!v.checked);
            wx.setStorageSync(cart, newCart);
            // 支付成功 跳转到订单页面
            wx.navigateTo({
              url: '/pages/order/index'
            });
          } catch (error) {
            await showToast({title:"支付失败"})
              console.log(error);
              
            }
          }



        })